package gui;

import java.awt.Component;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;

/**
 *
 * @author Mariano Zapata
 */
public class Selector {

    private JFileChooser selector;

    public Selector(FileFilter [] filtros, String titulo, boolean aceptarTodoTipoArchivo)
    {
        selector= new JFileChooser(System.getProperty("user.home"));
        selector.setDialogTitle(titulo);
        selector.setMultiSelectionEnabled(false);
        selector.setAcceptAllFileFilterUsed(aceptarTodoTipoArchivo);
        selector.setFileSelectionMode(JFileChooser.FILES_ONLY);
        for (FileFilter f : filtros)
            selector.addChoosableFileFilter(f);
    }

    public File hacerVisibleSelectorAbrir(Component padre)
    {
        int resp= selector.showOpenDialog(padre);
        File ret= null;
        if (resp == JFileChooser.APPROVE_OPTION)
        {
            File f= selector.getSelectedFile();
            if (!f.exists())
                this.mostrarMensajeError("Archivo no encontrado.\nVerifique que la ruta ingresada sea correcta.", padre);
            else
            {
                if (!this.extensionCorrecta(f.getName(), selector.getFileFilter().toString()))
                    this.mostrarMensajeError("Tipo de archivo incorrecto.", padre);
                else
                    ret= f;
            }
        }
        return ret;
    }

    public File hacerVisibleSelectorGuardar(Component padre)
    {
        int resp= selector.showSaveDialog(padre);
        File ret= null;
        if (resp == JFileChooser.APPROVE_OPTION)
        {
            File f= selector.getSelectedFile();
            String ext= selector.getFileFilter().toString();
            if (!this.extensionCorrecta(f.getName(), ext))
                f= new File(f.getAbsolutePath() + ext);
            if (f.exists())
            {
                resp= JOptionPane.showConfirmDialog(padre, "El archivo seleccionado ya existe.\n¿Desea reemplazarlo?",
                        "Guardar", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
                if (resp == JOptionPane.OK_OPTION)
                    ret= f;
            }
            else
                ret= f;
        }
        return ret;
    }

    public void predefinir(File archivo) {
        selector.setSelectedFile(archivo);
    }

    private void mostrarMensajeError(String msj, Component padre) {
        JOptionPane.showMessageDialog(padre, msj, "Error", JOptionPane.ERROR_MESSAGE);
    }

    private boolean extensionCorrecta(String nombreArchivo, String extension)
    {
        if (selector.isAcceptAllFileFilterUsed())
            return true;
        else
        {
            String temp= nombreArchivo.toLowerCase();
            return temp.endsWith(extension);
        }
    }
}
